package com.dalin.framework.common.utils;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

import com.dalin.framework.common.PropertyConst;

/*****************************************************************************
 * @content: 获得底层操作系统或虚拟机的一些基本信息类                                                                        *
 * @author : 那建林                                                                                                                                 *
 * @crtDate: 2010-02-02                                                     *
 ****************************************************************************/
public final class OperatingSystem {
	private OperatingSystem() {}
	
	private static final String OS_DOT_NAME = "os.name";
	private static final String USER_DOT_NAME = "user.name";
	
	
	/*************************************************************************
	 * @content: 获得系统运行环境的操作系统类型， 像Windows NT、Windows 2000、
	 *           Windows XP 等 统一 返回Windows系列，其他操作系统类同，
	 *           具体类型请参见PropertyConst.ARRAY_OS
	 * @return : com.common.PropertyConst.ARRAY_OS中一个值
	 * @author : 那建林
	 * @crtDate: 2010-02-02
	 * @chaDate: 2010-02-02
	 */
	public static String getCurrentOsType() {
		String osStr = System.getProperty(OS_DOT_NAME);
		for (String s : PropertyConst.ARRAY_OS) {
			if (osStr.startsWith(s)) {
				return s;
			}
		}
		return null;
	}
	
    
	/*************************************************************************
	 * @content: 获取所有网卡的MAC,单例
	 * @return : String[]
	 * @author : 那建林
	 * @throws : IOException 
	 * @crtDate: 2010-11-04
	 * @chaDate: 2010-11-04
	 */
	private static String[] MAX_ADDRESS_ARRAY = null;
    public static String[] getCurrentMACAddresses() throws IOException {
    	if (MAX_ADDRESS_ARRAY != null) {
    		return MAX_ADDRESS_ARRAY;
    	}
    	StringBuffer buf = new StringBuffer();
    	String osType = getCurrentOsType();
    	if (PropertyConst.ARRAY_OS[0].equals(osType)) {
    		Process process = Runtime.getRuntime().exec("/sbin/ifconfig");
        	InputStreamReader inputReader = new InputStreamReader(
        			process.getInputStream());
            LineNumberReader lineReader = new LineNumberReader(inputReader);
            String line;
            int index = -1;
            while ((line = lineReader.readLine()) != null){
            	// 寻找标示字符串[physical address]
            	index = line.toLowerCase().indexOf("hwaddr");
                if (index >= 0) { // 找到了   
                    buf.append(line.substring(index + 7).trim()); // 得到MAC
                    buf.append(PropertyConst.COMMA); // 加逗号
                }
            }
            lineReader.close();
            inputReader.close();
            MAX_ADDRESS_ARRAY = buf.toString().split(PropertyConst.COMMA);
    	} else if (PropertyConst.ARRAY_OS[2].equals(osType)) {
    		Process process = Runtime.getRuntime().exec("ipconfig /all");
        	InputStreamReader inputReader = new InputStreamReader(
        			process.getInputStream());
            LineNumberReader lineReader = new LineNumberReader(inputReader);
            String line;
            int index = -1;
            while ((line = lineReader.readLine()) != null){
            	// 寻找标示字符串[physical address]
            	index = line.toLowerCase().indexOf("physical address");
                if (index >= 0) { // 找到了
                    index = line.indexOf(PropertyConst.COLON); // 寻找":"的位置
                    buf.append(line.substring(index + 1).trim()); // 得到MAC
                    buf.append(PropertyConst.COMMA); // 加逗号
                }
            }
            lineReader.close();
            inputReader.close();
            MAX_ADDRESS_ARRAY = buf.toString().split(PropertyConst.COMMA);
    	}
    	return MAX_ADDRESS_ARRAY;
    }
    
    
    
	/*************************************************************************
	 * @content: 获得系统登录用户名
	 * @return : 当前系统登录的用户名
	 * @author : 那建林
	 * @crtDate: 2010-03-08
	 * @chaDate: 2010-03-08
	 */
	public static String getCurrentUserName() {
		return System.getProperty(USER_DOT_NAME);
	}
	
	public static void main(String[] args) {
		//Map m;装载系数   j2ee/jsp,servlet spring scope
		System.out.println(FileUtils.class.getClassLoader().getResource("/"));
	}
}

//http://space.jinghua.cn/html/84/10184-5929.html
